package 每日温度;

import java.util.Arrays;
import java.util.Stack;

/**
 * @author zhengTao
 * @version 1.0
 * @description: 每日温度
 * 给定一个整数数组temperatures，表示每天的温度，
 * 返回一个数组answer，其中answer[i]是指对于第 i 天，下一个更高温度出现在几天后。如果气温在这之后都不会升高，请在该位置用0 来代替。
 * @date 2022/11/26 16:26
 */
public class Demo739 {
    public int[] dailyTemperatures(int[] temperatures) {
        int[] res = new int[temperatures.length];
        //初始化值
        Arrays.fill(res, 0);
        //单调递增栈记录元素索引
        Stack<Integer> stack = new Stack<>();
        for (int i = 0; i < temperatures.length; i++) {
            //栈不为空切栈顶元素小于当前元素
            while (!stack.isEmpty() &&temperatures[i] > temperatures[stack.peek()]) {
                Integer pop = stack.pop(); //出栈，出栈元素为数组索引
                res[pop]=i-pop;
            }
            stack.push(i);
        }
        return res;
    }
}
